TSTP Solution File: GEG018^1 by Satallax---3.5

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Satallax---3.5
% Problem  : GEG018^1 : TPTP v8.1.0. Released v4.1.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : satallax -E eprover-ho -P picomus -M modes -p tstp -t %d %s

% Computer : n024.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8042.1875MB
% OS       : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit  : 600s
% DateTime : Sat Jul 16 02:41:38 EDT 2022

% Result   : Theorem 25.83s 26.03s
% Output   : Proof 25.83s
% Verified : 
% SZS Type : ERROR: Analysing output (MakeTreeStats fails)

% Comments : 
%------------------------------------------------------------------------------
thf(ty_reg,type,
    reg: $tType ).

thf(ty_fool,type,
    fool: $i > $i > $o ).

thf(ty_eigen__2,type,
    eigen__2: reg ).

thf(ty_eigen__1,type,
    eigen__1: $i ).

thf(ty_eigen__0,type,
    eigen__0: $i ).

thf(ty_c,type,
    c: reg > reg > $o ).

thf(sP1,plain,
    ( sP1
  <=> ( ! [X1: reg] :
          ( ( c @ X1 @ eigen__2 )
         => ( c @ X1 @ eigen__2 ) )
     => ! [X1: reg] :
          ( ( c @ X1 @ eigen__2 )
         => ( c @ X1 @ eigen__2 ) ) ) ),
    introduced(definition,[new_symbols(definition,[sP1])]) ).

thf(sP2,plain,
    ( sP2
  <=> ! [X1: reg] :
        ( ( c @ X1 @ eigen__2 )
       => ( c @ X1 @ eigen__2 ) ) ),
    introduced(definition,[new_symbols(definition,[sP2])]) ).

thf(sP3,plain,
    ( sP3
  <=> ! [X1: reg] :
        ~ ( ~ ( ! [X2: reg] :
                  ( ( c @ X2 @ eigen__2 )
                 => ( c @ X2 @ X1 ) )
             => ! [X2: reg] :
                  ( ( c @ X2 @ X1 )
                 => ( c @ X2 @ eigen__2 ) ) )
         => ~ ! [X2: reg] :
                ( ~ ( ( c @ X2 @ eigen__2 )
                   => ~ ! [X3: reg] :
                          ( ! [X4: reg] :
                              ( ( c @ X4 @ X3 )
                             => ( c @ X4 @ X2 ) )
                         => ~ ! [X4: reg] :
                                ( ( c @ X4 @ X3 )
                               => ( c @ X4 @ eigen__2 ) ) ) )
               => ( ( c @ X2 @ X1 )
                 => ~ ! [X3: reg] :
                        ( ! [X4: reg] :
                            ( ( c @ X4 @ X3 )
                           => ( c @ X4 @ X2 ) )
                       => ~ ! [X4: reg] :
                              ( ( c @ X4 @ X3 )
                             => ( c @ X4 @ X1 ) ) ) ) ) ) ),
    introduced(definition,[new_symbols(definition,[sP3])]) ).

thf(sP4,plain,
    ( sP4
  <=> ( ~ sP1
     => ~ ! [X1: reg] :
            ( ~ ( ( c @ X1 @ eigen__2 )
               => ~ ! [X2: reg] :
                      ( ! [X3: reg] :
                          ( ( c @ X3 @ X2 )
                         => ( c @ X3 @ X1 ) )
                     => ~ ! [X3: reg] :
                            ( ( c @ X3 @ X2 )
                           => ( c @ X3 @ eigen__2 ) ) ) )
           => ( ( c @ X1 @ eigen__2 )
             => ~ ! [X2: reg] :
                    ( ! [X3: reg] :
                        ( ( c @ X3 @ X2 )
                       => ( c @ X3 @ X1 ) )
                   => ~ ! [X3: reg] :
                          ( ( c @ X3 @ X2 )
                         => ( c @ X3 @ eigen__2 ) ) ) ) ) ) ),
    introduced(definition,[new_symbols(definition,[sP4])]) ).

thf(def_meq_ind,definition,
    ( meq_ind
    = ( ^ [X1: mu,X2: mu,X3: $i] : ( X1 = X2 ) ) ) ).

thf(def_meq_prop,definition,
    ( meq_prop
    = ( ^ [X1: $i > $o,X2: $i > $o,X3: $i] :
          ( ( X1 @ X3 )
          = ( X2 @ X3 ) ) ) ) ).

thf(def_mnot,definition,
    ( mnot
    = ( ^ [X1: $i > $o,X2: $i] :
          ~ ( X1 @ X2 ) ) ) ).

thf(def_mor,definition,
    ( mor
    = ( ^ [X1: $i > $o,X2: $i > $o,X3: $i] :
          ( ~ ( X1 @ X3 )
         => ( X2 @ X3 ) ) ) ) ).

thf(def_mand,definition,
    ( mand
    = ( ^ [X1: $i > $o,X2: $i > $o] : ( mnot @ ( mor @ ( mnot @ X1 ) @ ( mnot @ X2 ) ) ) ) ) ).

thf(def_mimplies,definition,
    ( mimplies
    = ( ^ [X1: $i > $o] : ( mor @ ( mnot @ X1 ) ) ) ) ).

thf(def_mimplied,definition,
    ( mimplied
    = ( ^ [X1: $i > $o,X2: $i > $o] : ( mor @ ( mnot @ X2 ) @ X1 ) ) ) ).

thf(def_mequiv,definition,
    ( mequiv
    = ( ^ [X1: $i > $o,X2: $i > $o] : ( mand @ ( mimplies @ X1 @ X2 ) @ ( mimplies @ X2 @ X1 ) ) ) ) ).

thf(def_mxor,definition,
    ( mxor
    = ( ^ [X1: $i > $o,X2: $i > $o] : ( mnot @ ( mequiv @ X1 @ X2 ) ) ) ) ).

thf(def_mforall_ind,definition,
    ( mforall_ind
    = ( ^ [X1: mu > $i > $o,X2: $i] :
        ! [X3: mu] : ( X1 @ X3 @ X2 ) ) ) ).

thf(def_mforall_prop,definition,
    ( mforall_prop
    = ( ^ [X1: ( $i > $o ) > $i > $o,X2: $i] :
        ! [X3: $i > $o] : ( X1 @ X3 @ X2 ) ) ) ).

thf(def_mexists_ind,definition,
    ( mexists_ind
    = ( ^ [X1: mu > $i > $o] :
          ( mnot
          @ ( mforall_ind
            @ ^ [X2: mu] : ( mnot @ ( X1 @ X2 ) ) ) ) ) ) ).

thf(def_mexists_prop,definition,
    ( mexists_prop
    = ( ^ [X1: ( $i > $o ) > $i > $o] :
          ( mnot
          @ ( mforall_prop
            @ ^ [X2: $i > $o] : ( mnot @ ( X1 @ X2 ) ) ) ) ) ) ).

thf(def_mtrue,definition,
    ( mtrue
    = ( ^ [X1: $i] : ~ $false ) ) ).

thf(def_mfalse,definition,
    ( mfalse
    = ( mnot @ mtrue ) ) ).

thf(def_mbox,definition,
    ( mbox
    = ( ^ [X1: $i > $i > $o,X2: $i > $o,X3: $i] :
        ! [X4: $i] :
          ( ( X1 @ X3 @ X4 )
         => ( X2 @ X4 ) ) ) ) ).

thf(def_mdia,definition,
    ( mdia
    = ( ^ [X1: $i > $i > $o,X2: $i > $o] : ( mnot @ ( mbox @ X1 @ ( mnot @ X2 ) ) ) ) ) ).

thf(def_mreflexive,definition,
    ( mreflexive
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i] : ( X1 @ X2 @ X2 ) ) ) ).

thf(def_msymmetric,definition,
    ( msymmetric
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i] :
          ( ( X1 @ X2 @ X3 )
         => ( X1 @ X3 @ X2 ) ) ) ) ).

thf(def_mserial,definition,
    ( mserial
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i] :
          ~ ! [X3: $i] :
              ~ ( X1 @ X2 @ X3 ) ) ) ).

thf(def_mtransitive,definition,
    ( mtransitive
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ~ ( ( X1 @ X2 @ X3 )
             => ~ ( X1 @ X3 @ X4 ) )
         => ( X1 @ X2 @ X4 ) ) ) ) ).

thf(def_meuclidean,definition,
    ( meuclidean
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ~ ( ( X1 @ X2 @ X3 )
             => ~ ( X1 @ X2 @ X4 ) )
         => ( X1 @ X3 @ X4 ) ) ) ) ).

thf(def_mpartially_functional,definition,
    ( mpartially_functional
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ~ ( ( X1 @ X2 @ X3 )
             => ~ ( X1 @ X2 @ X4 ) )
         => ( X3 = X4 ) ) ) ) ).

thf(def_mfunctional,definition,
    ( mfunctional
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i] :
          ~ ! [X3: $i] :
              ( ( X1 @ X2 @ X3 )
             => ~ ! [X4: $i] :
                    ( ( X1 @ X2 @ X4 )
                   => ( X3 = X4 ) ) ) ) ) ).

thf(def_mweakly_dense,definition,
    ( mweakly_dense
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ( X1 @ X2 @ X3 )
         => ~ ! [X5: $i] :
                ( ( X1 @ X2 @ X5 )
               => ~ ( X1 @ X5 @ X3 ) ) ) ) ) ).

thf(def_mweakly_connected,definition,
    ( mweakly_connected
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ~ ( ( X1 @ X2 @ X3 )
             => ~ ( X1 @ X2 @ X4 ) )
         => ( ~ ( ~ ( X1 @ X3 @ X4 )
               => ( X3 = X4 ) )
           => ( X1 @ X4 @ X3 ) ) ) ) ) ).

thf(def_mweakly_directed,definition,
    ( mweakly_directed
    = ( ^ [X1: $i > $i > $o] :
        ! [X2: $i,X3: $i,X4: $i] :
          ( ~ ( ( X1 @ X2 @ X3 )
             => ~ ( X1 @ X2 @ X4 ) )
         => ~ ! [X5: $i] :
                ( ( X1 @ X3 @ X5 )
               => ~ ( X1 @ X4 @ X5 ) ) ) ) ) ).

thf(def_mvalid,definition,
    mvalid = !! ).

thf(def_minvalid,definition,
    ( minvalid
    = ( ^ [X1: $i > $o] :
        ! [X2: $i] :
          ~ ( X1 @ X2 ) ) ) ).

thf(def_msatisfiable,definition,
    ( msatisfiable
    = ( ^ [X1: $i > $o] :
          ~ ! [X2: $i] :
              ~ ( X1 @ X2 ) ) ) ).

thf(def_mcountersatisfiable,definition,
    ( mcountersatisfiable
    = ( ^ [X1: $i > $o] :
          ~ ( !! @ X1 ) ) ) ).

thf(def_dc,definition,
    ( dc
    = ( ^ [X1: reg,X2: reg] :
          ~ ( c @ X1 @ X2 ) ) ) ).

thf(def_p,definition,
    ( p
    = ( ^ [X1: reg,X2: reg] :
        ! [X3: reg] :
          ( ( c @ X3 @ X1 )
         => ( c @ X3 @ X2 ) ) ) ) ).

thf(def_eq,definition,
    ( eq
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ( p @ X1 @ X2 )
           => ~ ( p @ X2 @ X1 ) ) ) ) ).

thf(def_o,definition,
    ( o
    = ( ^ [X1: reg,X2: reg] :
          ~ ! [X3: reg] :
              ( ( p @ X3 @ X1 )
             => ~ ( p @ X3 @ X2 ) ) ) ) ).

thf(def_po,definition,
    ( po
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ~ ( ( o @ X1 @ X2 )
               => ( p @ X1 @ X2 ) )
           => ( p @ X2 @ X1 ) ) ) ) ).

thf(def_ec,definition,
    ( ec
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ( c @ X1 @ X2 )
           => ( o @ X1 @ X2 ) ) ) ) ).

thf(def_pp,definition,
    ( pp
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ( p @ X1 @ X2 )
           => ( p @ X2 @ X1 ) ) ) ) ).

thf(def_tpp,definition,
    ( tpp
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ( pp @ X1 @ X2 )
           => ! [X3: reg] :
                ( ( ec @ X3 @ X1 )
               => ~ ( ec @ X3 @ X2 ) ) ) ) ) ).

thf(def_ntpp,definition,
    ( ntpp
    = ( ^ [X1: reg,X2: reg] :
          ~ ( ( pp @ X1 @ X2 )
           => ~ ! [X3: reg] :
                  ( ( ec @ X3 @ X1 )
                 => ~ ( ec @ X3 @ X2 ) ) ) ) ) ).

thf(con,conjecture,
    ! [X1: $i,X2: $i] :
      ( ( fool @ X1 @ X2 )
     => ! [X3: reg] :
          ~ ! [X4: reg] :
              ~ ( ~ ( ! [X5: reg] :
                        ( ( c @ X5 @ X3 )
                       => ( c @ X5 @ X4 ) )
                   => ! [X5: reg] :
                        ( ( c @ X5 @ X4 )
                       => ( c @ X5 @ X3 ) ) )
               => ~ ! [X5: reg] :
                      ( ~ ( ( c @ X5 @ X3 )
                         => ~ ! [X6: reg] :
                                ( ! [X7: reg] :
                                    ( ( c @ X7 @ X6 )
                                   => ( c @ X7 @ X5 ) )
                               => ~ ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X3 ) ) ) )
                     => ~ ~ ( ( c @ X5 @ X4 )
                           => ~ ! [X6: reg] :
                                  ( ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X5 ) )
                                 => ~ ! [X7: reg] :
                                        ( ( c @ X7 @ X6 )
                                       => ( c @ X7 @ X4 ) ) ) ) ) ) ) ).

thf(h0,negated_conjecture,
    ~ ! [X1: $i,X2: $i] :
        ( ( fool @ X1 @ X2 )
       => ! [X3: reg] :
            ~ ! [X4: reg] :
                ~ ( ~ ( ! [X5: reg] :
                          ( ( c @ X5 @ X3 )
                         => ( c @ X5 @ X4 ) )
                     => ! [X5: reg] :
                          ( ( c @ X5 @ X4 )
                         => ( c @ X5 @ X3 ) ) )
                 => ~ ! [X5: reg] :
                        ( ~ ( ( c @ X5 @ X3 )
                           => ~ ! [X6: reg] :
                                  ( ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X5 ) )
                                 => ~ ! [X7: reg] :
                                        ( ( c @ X7 @ X6 )
                                       => ( c @ X7 @ X3 ) ) ) )
                       => ( ( c @ X5 @ X4 )
                         => ~ ! [X6: reg] :
                                ( ! [X7: reg] :
                                    ( ( c @ X7 @ X6 )
                                   => ( c @ X7 @ X5 ) )
                               => ~ ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X4 ) ) ) ) ) ) ),
    inference(assume_negation,[status(cth)],[con]) ).

thf(h1,assumption,
    ~ ! [X1: $i] :
        ( ( fool @ eigen__0 @ X1 )
       => ! [X2: reg] :
            ~ ! [X3: reg] :
                ~ ( ~ ( ! [X4: reg] :
                          ( ( c @ X4 @ X2 )
                         => ( c @ X4 @ X3 ) )
                     => ! [X4: reg] :
                          ( ( c @ X4 @ X3 )
                         => ( c @ X4 @ X2 ) ) )
                 => ~ ! [X4: reg] :
                        ( ~ ( ( c @ X4 @ X2 )
                           => ~ ! [X5: reg] :
                                  ( ! [X6: reg] :
                                      ( ( c @ X6 @ X5 )
                                     => ( c @ X6 @ X4 ) )
                                 => ~ ! [X6: reg] :
                                        ( ( c @ X6 @ X5 )
                                       => ( c @ X6 @ X2 ) ) ) )
                       => ( ( c @ X4 @ X3 )
                         => ~ ! [X5: reg] :
                                ( ! [X6: reg] :
                                    ( ( c @ X6 @ X5 )
                                   => ( c @ X6 @ X4 ) )
                               => ~ ! [X6: reg] :
                                      ( ( c @ X6 @ X5 )
                                     => ( c @ X6 @ X3 ) ) ) ) ) ) ),
    introduced(assumption,[]) ).

thf(h2,assumption,
    ~ ( ( fool @ eigen__0 @ eigen__1 )
     => ! [X1: reg] :
          ~ ! [X2: reg] :
              ~ ( ~ ( ! [X3: reg] :
                        ( ( c @ X3 @ X1 )
                       => ( c @ X3 @ X2 ) )
                   => ! [X3: reg] :
                        ( ( c @ X3 @ X2 )
                       => ( c @ X3 @ X1 ) ) )
               => ~ ! [X3: reg] :
                      ( ~ ( ( c @ X3 @ X1 )
                         => ~ ! [X4: reg] :
                                ( ! [X5: reg] :
                                    ( ( c @ X5 @ X4 )
                                   => ( c @ X5 @ X3 ) )
                               => ~ ! [X5: reg] :
                                      ( ( c @ X5 @ X4 )
                                     => ( c @ X5 @ X1 ) ) ) )
                     => ( ( c @ X3 @ X2 )
                       => ~ ! [X4: reg] :
                              ( ! [X5: reg] :
                                  ( ( c @ X5 @ X4 )
                                 => ( c @ X5 @ X3 ) )
                             => ~ ! [X5: reg] :
                                    ( ( c @ X5 @ X4 )
                                   => ( c @ X5 @ X2 ) ) ) ) ) ) ),
    introduced(assumption,[]) ).

thf(h3,assumption,
    fool @ eigen__0 @ eigen__1,
    introduced(assumption,[]) ).

thf(h4,assumption,
    ~ ! [X1: reg] :
        ~ ! [X2: reg] :
            ~ ( ~ ( ! [X3: reg] :
                      ( ( c @ X3 @ X1 )
                     => ( c @ X3 @ X2 ) )
                 => ! [X3: reg] :
                      ( ( c @ X3 @ X2 )
                     => ( c @ X3 @ X1 ) ) )
             => ~ ! [X3: reg] :
                    ( ~ ( ( c @ X3 @ X1 )
                       => ~ ! [X4: reg] :
                              ( ! [X5: reg] :
                                  ( ( c @ X5 @ X4 )
                                 => ( c @ X5 @ X3 ) )
                             => ~ ! [X5: reg] :
                                    ( ( c @ X5 @ X4 )
                                   => ( c @ X5 @ X1 ) ) ) )
                   => ( ( c @ X3 @ X2 )
                     => ~ ! [X4: reg] :
                            ( ! [X5: reg] :
                                ( ( c @ X5 @ X4 )
                               => ( c @ X5 @ X3 ) )
                           => ~ ! [X5: reg] :
                                  ( ( c @ X5 @ X4 )
                                 => ( c @ X5 @ X2 ) ) ) ) ) ),
    introduced(assumption,[]) ).

thf(h5,assumption,
    sP3,
    introduced(assumption,[]) ).

thf(1,plain,
    ( sP1
    | ~ sP2 ),
    inference(prop_rule,[status(thm)],]) ).

thf(2,plain,
    ( sP1
    | sP2 ),
    inference(prop_rule,[status(thm)],]) ).

thf(3,plain,
    ( sP4
    | ~ sP1 ),
    inference(prop_rule,[status(thm)],]) ).

thf(4,plain,
    ( ~ sP3
    | ~ sP4 ),
    inference(all_rule,[status(thm)],]) ).

thf(5,plain,
    $false,
    inference(prop_unsat,[status(thm),assumptions([h5,h3,h4,h2,h1,h0])],[1,2,3,4,h5]) ).

thf(6,plain,
    $false,
    inference(tab_negall,[status(thm),assumptions([h3,h4,h2,h1,h0]),tab_negall(discharge,[h5]),tab_negall(eigenvar,eigen__2)],[h4,5,h5]) ).

thf(7,plain,
    $false,
    inference(tab_negimp,[status(thm),assumptions([h2,h1,h0]),tab_negimp(discharge,[h3,h4])],[h2,6,h3,h4]) ).

thf(8,plain,
    $false,
    inference(tab_negall,[status(thm),assumptions([h1,h0]),tab_negall(discharge,[h2]),tab_negall(eigenvar,eigen__1)],[h1,7,h2]) ).

thf(9,plain,
    $false,
    inference(tab_negall,[status(thm),assumptions([h0]),tab_negall(discharge,[h1]),tab_negall(eigenvar,eigen__0)],[h0,8,h1]) ).

thf(0,theorem,
    ! [X1: $i,X2: $i] :
      ( ( fool @ X1 @ X2 )
     => ! [X3: reg] :
          ~ ! [X4: reg] :
              ~ ( ~ ( ! [X5: reg] :
                        ( ( c @ X5 @ X3 )
                       => ( c @ X5 @ X4 ) )
                   => ! [X5: reg] :
                        ( ( c @ X5 @ X4 )
                       => ( c @ X5 @ X3 ) ) )
               => ~ ! [X5: reg] :
                      ( ~ ( ( c @ X5 @ X3 )
                         => ~ ! [X6: reg] :
                                ( ! [X7: reg] :
                                    ( ( c @ X7 @ X6 )
                                   => ( c @ X7 @ X5 ) )
                               => ~ ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X3 ) ) ) )
                     => ~ ~ ( ( c @ X5 @ X4 )
                           => ~ ! [X6: reg] :
                                  ( ! [X7: reg] :
                                      ( ( c @ X7 @ X6 )
                                     => ( c @ X7 @ X5 ) )
                                 => ~ ! [X7: reg] :
                                        ( ( c @ X7 @ X6 )
                                       => ( c @ X7 @ X4 ) ) ) ) ) ) ),
    inference(contra,[status(thm),contra(discharge,[h0])],[9,h0]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.03/0.11  % Problem  : GEG018^1 : TPTP v8.1.0. Released v4.1.0.
% 0.03/0.12  % Command  : satallax -E eprover-ho -P picomus -M modes -p tstp -t %d %s
% 0.12/0.32  % Computer : n024.cluster.edu
% 0.12/0.32  % Model    : x86_64 x86_64
% 0.12/0.32  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.32  % Memory   : 8042.1875MB
% 0.12/0.32  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.12/0.32  % CPULimit : 300
% 0.12/0.32  % WCLimit  : 600
% 0.12/0.32  % DateTime : Tue Jun  7 05:00:05 EDT 2022
% 0.12/0.33  % CPUTime  : 
% 25.83/26.03  % SZS status Theorem
% 25.83/26.03  % Mode: mode461
% 25.83/26.03  % Inferences: 760
% 25.83/26.03  % SZS output start Proof
% See solution above
%------------------------------------------------------------------------------